home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
mus
/
play
/
DeliTracker1_37.lha
/
DeliTracker
/
Docs
/
DeliTracker.dok
< prev
next >
Wrap
Text File
|
1993-05-07
|
57KB
|
1,514 lines
***************************************************************************
* DeliTracker *
***************************************************************************
© 1992 by Delirium
$VER: V1.37 (03.04.1993)
1. INHALTSVERZEICHNIS
1.INHALTSVERZEICHNIS
2.RECHTLICHES UND VERTRIEB
3.EINLEITUNG
3.1 Was ist DeliTracker ?
3.2 Wieso gerade DeliTracker benutzen ?
4. START VON DELITRACKER
4.1 Systemanforderungen
4.2 Start vom CLI bzw. von der Shell
4.3 Start von der Workbench
4.4 Installation
5. GRUNDKONZEPTE
5.1 Player
5.2 gepackte Module
5.3 Optionen und Voreinstellungen
5.4 Das Konfigurationsfile
6. DIE STEUERUNG VON DELITRACKER
6.1 Das Kontroll Fenster
6.1.1 Gadgets
6.1.2 Menus
6.1.3 Shortcuts
6.1.4 Appwindow
6.2 Das Setup Fenster
6.2.1 Gadgets
6.2.2 Shortcuts
6.3 ARexx
6.4 Commodities
7. PROBLEMECKE
8. DIE PROGRAMIERUNG EXTERNER PLAYER
8.1 Das externe Player Konzept
8.1.1 Schematischer Aufbau von externen Playern
8.1.2 Schematischer Aufbau von Custom Modulen
8.2 Anpassung von Playern
8.2.1 Playerheader
8.2.2 Modulerkennung
8.2.3 Interrupts
8.3 Bedeutung der Tags
8.4 DeliTracker support Funktionen
8.5 Tips zur Anpassung
9. DANKSAGUNGEN
2. RECHTLICHES UND VERTRIEB
DeliTracker (c) 1991 - 1993 by Peter Kunath und Frank Riffel.
DeliTracker ist Shareware. Das heißt, wenn Ihnen dieses Programm gefällt
und Sie es öfters benutzen, erwarten wir von Ihnen, daß Sie sich bei uns
registrieren lassen. Die Sharewaregebühr beträgt 20 DM bzw. $US 20 und ist
in BAR oder als EUROCHEQUE zu entrichten. Leider ist es uns nicht möglich,
andere Schecks (insbesondere Amerikanische) zu akzeptieren. Als Gegen-
leistung erhalten Sie die neueste Version auf Disk. Durch Ihren Beitrag
helfen Sie mit, die ständige Verbesserung dieses Tools zu sichern. Schicken
Sie die ausgefüllte Registrierkarte (Orderform) und den Betrag an:
Frank Riffel
Merkstr. 27
8129 Wessobrunn
Germany
An diese Adresse können Sie auch schreiben, falls Sie irgendwelche Bugs
finden oder Vorschläge und Bemerkungen zu diesem Programm haben. Wenn Sie
ein neues Soundsystem geschrieben haben und Interesse an der Anpassung
an DeliTracker haben, können Sie sich natürlich auch an uns wenden.
DeliTracker darf auf Public-Domain-, Shareware-Disketten und Netzwerken
vertrieben und verbreitet werden, solange folgende Bedingungen
eingehalten werden:
° alle Dateien müssen komplett weitergegeben werden. Die zu
DeliTracker gehörenden Dateien sind in 'Distribution' aufgelistet.
° Programm und Dokumentation dürfen in keiner Weise geändert werden.
Eine Ausnahme stellt das Packen dar, wenn sich der Orginalzustand
wieder zu 100% herstellen läßt (z.B. mit LhA).
° Der Gesamtpreis für Disketten, auf denen DeliTracker enthalten ist,
und die Übertragungsgebühren in Netzwerken dürfen nicht höher als
8 DM bzw. $US 6 oder einen gleichwertigen Betrag in einer anderen
Währung sein.
° Jegliche kommerzielle Nutzung, insbesondere die Verbreitung von
DeliTracker zusammen mit kommerziellen Produkten, bedarf einer
schriftlichen Genehmigung der Autoren.
Die Autoren übernehmen keinerlei Haftung für Schäden, die durch die
Benutzung dieses Programms entstehen. Wir weisen in diesem Zusammenhang
aber darauf hin, daß DeliTracker sorgfältig entwickelt und getestet wurde.
3. EINLEITUNG
3.1 Was ist DeliTracker ?
DeliTracker ist ein flexibler Soundplayer, der viele verschiedene Sound-
formate abspielen kann. Man sollte ihn nicht mit einen Songeditor, MIDI-
sequenzer oder Digitizer verwechseln. Er ist ausschließlich dazu gedacht,
komfortabel Musik abzuspielen. Die Player für die Unterstützung von
SoundTracker 15 instruments, SoundTracker 31 instruments, StarTrekker
ohne AM Sounds, NoiseTracker, ProTracker und Customplay Modulen sind
bereits intern eingebaut. Weitere Player können bei Bedarf nachgeladen
werden. Das bedeutet, daß man sehr schnell, einfach und bequem neue Player
hinzufügen kann.
3.2 Wieso gerade DeliTracker benutzen ?
Es gibt eine Vielzahl von Gründen, DeliTracker zu verwenden, dazu zählen:
° läuft zuverlässig im Multitasking
° belegt die Soundkanäle
° hat ein ARexx - Interface
° korrekte Abspielgeschwindigkeit auch auf NTSC-Geräten
° verträgt sich mit dem serial.device
° unterstützt mit xpk gecrunchte Soundfiles
° verwaltet bis zu 80 Player
° läuft auf Turbokarten
° hat ein Configurationsfile
° enforcer und mungwall getestet
° volle Unterstützung von CLI und Workbench (Tooltypes)
° kinderleichte Bedienung durch ansprechende Oberfläche
° Volume/Balance - Regler
° Mulitselect von Files
° Resident Startup vom CLI
° vollständige PubScreen Unterstützung
° Aktivierung per Hotkey (Commodity)
° Module können auch gespielt werden, indem ihr Icon in das
Kontrollfenster abgelegt wird (Appwindow).
° wurde zu 100% in Assembler geschrieben
4. START VON DELITRACKER
4.1 Systemanforderungen
DeliTracker erfordert ab Version 1.31 mindestens Kickstart und Workbench
2.04. Wir empfehlen jedoch die Verwendung von Workbench 2.1 (bzw. 3.0).
Bei diesen Versionen ist der ASL Filerequester wesentlich verbessert
worden unterstützt nun auch Multiselect. Wenn gepackte Module abgespielt
werden sollen, müssen zusätzlich die 'xpkmaster.library' und die
entsprechenden Sub-Libraries installiert sein. Der Grundbedarf an
Speicher ist etwa 70KB, dazu kommt dann noch der Speicher für evtl.
zusätzlich geladene Player, die Modulliste und das entpackte Soundfile.
Natürlich sollte Ihr Amiga an einem Monitor mit Lautsprechern oder besser
noch an einer Stereo Anlage angeschlossen sein.
4.2 Start vom CLI bzw. von der Shell.
Öffnen sie ein CLI- oder Shellfenster und gehen Sie mittels des 'CD'
Befehls in das Verzeichnis, in dem sich DeliTracker befindet. Geben Sie
jetzt 'DeliTracker' ein (ohne die Hochkommata !) und drücken Sie die
Return-Taste. DeliTracker wird nun geladen und gestartet. Da DeliTracker
sich selbst vom CLI löst, muß er nicht mit 'run' oder 'runback' gestartet
werden, um das CLI-Window wieder schließen zu können. Alle unter 5.4
erläuterten Optionen können beim Start angegeben werden. Bei falschen
Eingaben oder ungültigen Optionen wird ein Hilfstext ausgegeben.
Beispiel: 'DeliTracker config DT.config volume 32 filter no'
Startet DeliTracker mit dem Konfigurationsfile 'DT.config', schaltet den
Lowpass Filter ab (nicht beim A1000) und setzt die Lautstärke auf 32.
4.3 Start von der Workbench
Öffnen Sie den Ordner, in dem sich DeliTracker befindet und starten Sie
das Programm durch einen Doppelklick auf dessen Icon. Mit dem 'Info'-item
aus dem Workbench- bzw. Iconmenu (je nach Kickstart) können alle unter
5.4 erklärten Optionen als ToolTypes eingetragen werden. Dabei ist jedoch
zu beachten, daß die Optionen von den Argumenten durch '=' getrennt
werden. Ungültige Optionen werden beim Start von der Workbench ignoriert.
DeliTracker kann natürlich auch als 'Default Tool' angegeben werden.
Beispiel: Config=DT.config
PrefWinXY=0/11
Volume=43
CX_Popup=NO
Diese Tooltypes bewirken, daß als Konfigurationsdatei 'DT.config'
geladen und die Lautstärke auf 43 gesetzt wird. Die Koordinaten für
das Setupfenster werden auf Position 0/11 gestellt. Das Kontrollfenster
wird überhaupt nicht geöffnet.
4.4 Installation
Falls Sie schon im Besitz einer älteren Version von DeliTracker sind,
sollten Sie diese (bis auf evtl. selbstgeschriebene Player) vor der
Installation der neuen Version komplett löschen.
Kopieren Sie dann DeliTracker in ein Verzeichnis Ihrer Wahl. In dieses
Verzeichnis müssen Sie jetzt nur noch die 'DeliPlayers' Schublade
kopieren. Wir schlagen vor, daß Sie selten oder (noch) nicht benötigte
Player von DeliPlayers/ nach DeliPlayers/PlayerStore/ kopieren. Sie
können die Player dann bei Bedarf nachladen. Hinweis: Jeder Player,
der sich direkt im 'DeliPlayers' Verzeichnis befindet, wird beim Start
automatisch geladen. Das heißt aber auch, daß er Speicher benötigt.
Wenn Sie gepackte Module besitzen müssen Sie noch die XPK Libraries
installieren. Sollten sie sich noch nicht in Ihrem LIBS: Verzeichnis
befinden, können Sie diese automatisch installieren lassen. CopyLibs
kopiert nach einem Doppelklick auf das Icon die powerpacker.library
und die XPK Libraries nach LIBS:.
5. GRUNDKONZEPTE
5.1 Player
Mit DeliTracker ist es möglich, einzelne Player nachzuladen. Ist ein
solcher Player geladen worden, erkennt und spielt DeliTracker die Module,
die von diesem Player unterstützt werden. Derzeit können maximal 80
externe Player nachgeladen werden. Dies sollte jedoch erst mal für eine
Weile reichen. Beim Start von DeliTracker werden alle Player, die sich im
Verzeichnis 'DeliPlayers' (b.z.w im Configfile gespeicherten Playerpfad)
befinden, geladen. Zusätzlich haben Sie jederzeit die Möglichkeit einen
weiteren bzw. neueren Player nachzuladen. Dieses Playerkonzept ist legt
den Grundstein für die große Flexibilität von DeliTracker. Einer der
Vorteile davon ist, daß der Benutzer eine einheitliche Oberfläche
anspricht, um die unterschiedlichsten Musikformate abzuspielen. Soweit
dies möglich ist, bleiben die gesamten Möglichkeiten von DeliTracker
voll erhalten. Die ist z.B. besonders nützlich im Zusammenhang von Multi-
Media Anwendungen und ARexx. Um Speicher zu sparen ist es möglich, die
benötigten Player erst bei Bedarf zu laden b.z.w unbenutzte Player wieder
zu entfernen. Durch die nachladbaren Player ist es wesentlich einfacher
und schneller möglich, neue Entwicklungen (Verbesserungen alter Player,
Anpassung neuer Player) zu verbreiten. Das Player Interface gibt dem
Anwender außerdem die Möglichkeit, selbst externe Player zu schreiben.
Im Augenblick sind ProTracker/NoiseTracker/SoundTracker15/SoundTracker31
und StarTrekker ohne AM Sounds bereits intern in DeliTracker enthalten.
CustomPlay ist ebenfalls ein interner Player, der für spezielle Module,
die ihren Player bereits beinhalten, geschaffen wurde. Dabei ist zu
beachten, daß diese Module nicht gepackt werden dürfen, weil sie, um eine
Relozierung zu ermöglichen, mit LoadSeg() geladen werden! Alle externen
Player sind in 'Player.dok' aufgelistet.
5.2 gepackte Module
Falls die xpkmaster.library V2 oder höher installiert ist, benutzt
DeliTracker deren Entpackroutinen. Ob Sie Soundmodule packen dürfen,
können Sie im PlayerInfo-Feld erfahren. Wenn dort 'Packable....NO'
steht, darf das Soundmodul auf keinen Fall gepackt werden, sonst wird
von DeliTracker nicht mehr erkannt. Bei 'Packable....YES' unterstützt
der jeweilige Player mit größter Wahrscheinlichkeit gepackte Module.
Zumindest kann in JEDEM Fall das von Ihnen angewählte File gepackt
werden. Werden von diesem Player weitere Dateien nachgeladen, dürfen
Sie diese möglicherweise nicht mehr packen. Lesen Sie dazu die zugehörige
DeliPlayer Dokumentation.
Hinweis: Custommodule dürfen nicht gepackt werden, da sie im Gegensatz
zu normalen Files nicht mit Read() sondern mit LoadSeg() geladen werden
(Relozierung des Playercodes) ! Eine möglichkeit Custom-Module dennoch
zu packen ist die verwendung des XFH Filehandlers.
5.3 Optionen und Voreinstellungen
Um eine flexible Konfiguration von DeliTracker zu erlauben, wurden
folgende Optionen eingeführt. Diese Optionen werden von DeliTracker als
KEYWORDS in TOOLTYPES, CLI Templates und in Konfigurationsdateien benutzt.
Die Groß- oder Kleinschreibung der Optionen ist unwichtig!
Option Defaultwert und Beschreibung
------------------- ----------------------------
cx_priority <pri> 0 bzw. normale Priorität
Setzt die Priorität, mit der DeliTracker als
Commodity geführt wird. Gültige Werte sind
-128 bis 127.
cx_popup <yes|no> yes bzw. Fenster offen
Legt fest, ob das Kontrollfenster beim Start
geöffnet wird. Wird 'no' angegeben bleibt das
Kontrollfenster geschlossen. Es kann bei Bedarf
dann mittels Hotkey, Commodities Exchange oder
ARexx geöffnet werden.
cx_popkey <string> "" d.h. kein Hotkey
Hiermit läßt sich ein beliebiger Hotkey zum
Öffnen und Schließen des Kontrollfensters
angeben. Ein Schließen des Kontrollfensters über
Hotkey schließt automatisch auch das Setup
Fenster. Gleiches gilt auch für Hide Interface.
Um einen Hotkey zeitweilig abzuschalten, kann
DeliTracker im Commodities Exchange Programm
auf INACTIVE gestellt werden.
config <Datei> "ENV:DeliTracker.config"
Lädt die angegebene Datei beim Start als
Konfigurationsdatei.
Hinweis: Diese Option kann in Konfigurations-
dateien nicht angegeben werden !
module <Datei> Keine Datei bzw. die Modulliste ist leer.
Fügt die angegebene Datei in die Modulliste ein.
pubscreen <Screen> "", d.h. der default PubScreen (meist Workbench)
Setzt den Namen für den PublicScreen, auf dem
sich DeliTracker öffnen soll. Wenn der angegebene
Screen nicht verfügbar ist (z.B. nicht existiert),
dann öffnet sich DeliTracker auf dem derzeitigen
default PublicScreen.
Hinweis: Screennamen sind case-sensitive !
playerpath <Pfad> "DeliPlayers"
Legt den Pfad fest, aus dem DeliTracker die
externen Player nachlädt.
windowxy<XPos>/<YPos> 0/0
Das Kontrollfenster wird an der neuen Position
geöffnet. Gelingt dies nicht, so öffnet sich das
Fenster bei 0/0.
prefwinxy<XPos>/<YPos> 0/1
Das Setupfenster wird an der gewünschten Position
geöffnet. Schlägt dies fehl, so öffnet sich das
Fenster bei 0/1.
volume <Volume> 64 (volle Lautstärke)
Setzt die Lautstärke auf den angegebenen Wert.
Werte werden im Bereich von 0 bis 64 akzeptiert.
balance <Balance> 0 (ausgewogene Balance)
Die Balance wird auf den angegebenen Wert
gesetzt. Werte von -64 (nur links) bis 64 (nur
rechts) sind gültig.
reqlines <Nummer> 0 (Standardeinstellung des Requesters)
Legt die Anzahl der Zeilen im Filerequester fest.
subsong <Nummer> 0 bzw. erster Subsong
Falls das erste Modul in der Liste Subsongs
unterstützt, wird nicht der erste sondern der
angegebene Subsong gespielt.
playing <yes|no> yes bzw. Modul wird geladen
Legt fest, ob nach dem Start das erste Modul in
der Liste geladen werden soll.
Hinweis: Ob das Modul nach dem Laden sofort ge-
spielt wird, hängt von 'quick' (s. dort) ab!
filter <yes|no> no bzw. Filter aus
Schaltet den Amiga-internen Tiefpassfilter ein
oder aus. Es ist von Vorteil, den Filter ab-
geschaltet zu lassen, da dann Frequenzen über
7 kHz nicht mehr ausgefiltert werden, dies führt
zu einer merklichen Klangverbesserung.
Hinweis: Dieser Schalter ist beim Amiga 1000
ohne Wirkung !
quick <yes|no> yes bzw. Modul wird sofort gespielt
Legt fest, ob ein Modul sofort nach dem Laden
oder erst nach explizitem Play (Gadget/Shortcut/
ARexx) abgespielt wird. Diese Option ist
hauptsächlich zur Synchronisation in ARexx-
Scripts gedacht.
random <yes|no> no bzw. sequentielle Reihenfolge
Legt fest, ob bei einer Next/Prev-Song Aktion das
nachfolgende bzw. vorhergehende oder ein zufällig
ausgewähltes Modul der Liste gespielt wird. Ein
einmal gespieltes Modul wird solange nicht mehr
gespielt, bis alle anderen Module in der Liste
gespielt wurden. Diese Vorgehensweise ist auch
unter dem Stichpunkt Shuffleplay bekannt. Diese
Option ist nur sinnvoll bei mehr als zwei Modulen
in der Modulliste.
append <yes|no> no bzw. die Modulliste wird vor jedem Selektieren
gelöscht. Legt fest, ob bei jeder Fileauswahl
eine neue Liste angelegt werden soll oder die
Liste am Ende erweitert wird. Damit ist ein
Multiselect über mehrere Directorys möglich.
fadeout <yes|no> no bzw. kein Fading
Legt fest, ob bei einem Eject Ereignis der
aktuell spielende Song ausgeblendet werden soll
oder nicht. Diese Option ist nur bei Playern
wirksam, die eine Lautstärkeneinstellung
unterstützen.
songend <yes|no> no bzw. kein Beachten des Songendes
Legt fest, ob das Songende beachtet wird oder
nicht. Einige Player können DeliTracker
signalisieren, wenn das aktuelle Modul einmal
komplett gespielt wurde. Ist diese Option aktiv,
beachtet DeliTracker das Songende, d.h. das
aktuelle Modul wird gestoppt und dann eine
NextSong Aktion ausgelöst. Bei nur einem Modul
in der Songliste wird dies nur gestoppt.
timeout <Nummer> 0 bzw. kein Timeout
Legt die Zeitspanne (in Sekunden) fest, die ein
Modul spielt. Danach wird eine NextSong Aktion
ausgelöst. Bei 0 ist diese Funktion abgeschaltet.
5.4 Das Konfigurationsfile
Ein Konfigurationsfile ist eine Datei, in der mehrere Optionen mit den
gewünschten Argumenten aufgeführt sind. Dabei ist zu beachten, daß die
'config'-Option als einzige nicht benutzt werden kann. Pro Zeile darf
nur eine Option verwendet werden. Eine Konfigurationsdatei kann entweder
mit den Save Optionen aus dem Setup Fenster oder manuell ertstellt werden.
Mit Hilfe von NewList können sich Besitzer großer Modulverzeichnisse eine
Modulliste eines kompletten Directorys erstellen. Tragen Sie dazu
'alias ModList NL -hTigfsF "module=\'%P\'" []' in Ihre Shell-Startup ein.
Der Output muß nur noch in eine Datei umgeleitet werden.
Beispiel für eine Konfigurationsdatei:
windowxy=473/15
random=yes
songend=yes
timeout=300
reqlines=50
subsong=2
playerpath="Data:DeliPlayers"
module="Data:Modules/SonicArranger/MF__Slowmotion1.3"
module="Data:Modules/FutureComposer13/hidden part.pp"
Beim Start von DeliTracker haben die Optionen von CLI und Workbench
Priorität über ein Konfigurationsfile, d.h. die Einstellungen im
Konfigurationsfile werden dann durch die angegebene Option ersetzt.
Bei Programmstart versucht DeliTracker das Konfigurationsfile
'ENV:DeliTracker.config' zu öffnen. Ist diese Datei vorhanden, übernimmt
DeliTracker alle angegebenen Einstellungen daraus. Er lädt dann die
externen Player sowie das Modul und spielt es. Ist keine Konfigurations-
datei vorhanden, so wird versucht, externe Player aus dem Verzeichnis
'DeliPlayers' (im aktuellen Pfad) nachzuladen. Ist dieses Directory auch
nicht vorhanden, stehen dem Benutzer nur die internen Player zur
Verfügung.
6. DIE STEUERUNG VON DELITRACKER
6.1 Das Kontroll Fenster
Das Kontrollfenster ist das zentrale Bedienelement von DeliTracker, alle
Einstellungen, die das Modul betreffen, können hier gemacht werden.
6.1.1 Gadgets
Dies ist eine Übersicht über die Funktionen der einzelnen Gadgets.
Wenn bestimmte Gadgets gerastert dargestellt werden, ist für den
aktuellen Player diese Option nicht verfügbar. Das kann zum einen
bedeuten, daß die Funktion vom Player gar nicht unterstützt wird
(wie z.B Subsongs beim SoundTracker) oder zum anderen, daß der Player
noch nicht optimal angepaßt ist.
+---------+-+------------------------------------------------+-+
| | | [] | | [15]
[1] | ? + +------------------------------------------------+ +
| | | [] | | [14]
+---+-----+-+--+-----+-----+-----+----+-----+-----+-----+----+-+
[2] | + | | | | | | | | | | |¯¯\ |
+---+ |< | < | << | |> | >> | > | >| | [] | ^ | | | |
[3] | - | | | | | | | | | - | +--+ |
+---+-----+----+-----+-----+-----+----+-----+-----+-----+------+
[4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
[1] öffnet bzw. schließt das Setupwindow (siehe unten)
[2] Faster: erhöht die Abspielgeschwindigkeit des aktuellen Moduls
[3] Slower: verringert die Abspielgeschwindigkeit des aktuell
spielenden Musikstücks.
[4] Prev Song: wenn nur ein File angewählt wurde und der Song mit
Kill entfernt wurde, wird er wieder eingeladen. Sind mehrere
Files selektiert, wird der Vorgänger des aktuellen Songs
eingeladen (siehe auch Randomplay).
[5] Prev Subsong: spielt den vorherigen Subsong.
[6] Backward: der aktuelle Patternzeiger wird auf das vorherige
Pattern gesetzt. Wird gerade das erste Pattern gespielt, wird
er auf das letzte gesetzt.
[7] Play/Pause: startet einen pausierenden bzw. gestoppten Sound oder
hält den gerade spielenden Song an.
[8] Forward: der aktuelle Patternzeiger wird auf das nachfolgende
Pattern gesetzt. Wird gerade das letzte Pattern gespielt, wird
er auf das erste gesetzt.
[9] Next Subsong: spielt den nächsten Subsong. Manche Musikformate
erlauben es mehrere Melodien in einem Modul abzuspeichern, diese
und die 'Prev Subsong' Funktion erlauben das 'Blättern' in solchen
Modulen.
[10] Next Song: bei nur einem angewählten File wie bei 'Prev Song',
sonst wird der Nachfolger des aktuellen Songs eingeladen.
[11] Stop Song: setzt die Abspielgeschwindigkeit und den Patternzeiger
auf den Startwert zurück.
[12] Kill Song: stoppt ggf. den Song und entfernt ihn aus dem Speicher.
[13] Load Song: öffnet den Filerequester. Wenn beim Auswählen die SHIFT-
Taste gehalten wird, können mehrere Files angewählt werden. Diese
werden dann in eine zyklische Liste eingetragen. Nach Verlassen des
Requesters wird der erste ausgewählte Song geladen und gespielt.
Alle weiteren können über 'Next Song' bzw. 'Prev Song' erreicht
werden. Falls genügend Speicher vorhanden ist, wird der aktuell
spielende Song erst gestoppt, wenn der angewählte komplett geladen
wurde. Diese eingebaute Doublebuffering-Routine sorgt speziell bei
Floppybesitzern für Dauersoundgenuß.
[14] Balance-Regler: dieses Gadget dient zur Regelung der Balance.
[15] Volume-Regler: Gadget für die Lautstärke-Regelung
6.1.2 Menus
Project
Load Module <A> L .........Öffnet den Filerequester.
Play/Pause .........Startet bzw. Pausiert das Modul.
Stop Playing .........Stopt das aktuelle Modul.
Eject Module .........Stoppt das aktuelle Modul und
entfernt es aus dem Speicher.
=================
Prefs ... .........Öffnet das Setup Fenster.
=================
About ... <A> ? .........Öffnet den 'About' Requester.
=================
Quit <A> Q .........Beendet DeliTracker.
Control
Faster .........Erhöht das Abspieltempo.
Slower .........Verringert das Abspieltempo.
Forward .........Springt ein Pattern vor.
Backward .........Springt ein Pattern zurück.
Next SubSong .........Springt zum nächsten Subsong.
Prev Subsong .........Springt zum vorherigen Subsong.
Next Module .........Lädt das nächste Musikstück in
in der Liste, falls RANDOMPLAY
deaktiviert ist.
Prev Module .........Lädt das vorherige Modul (s.o.).
6.1.3 Shortcuts
Alle Funktionen des Kontroll Fensters lassen sich durch Tastatur-
abkürzungen auslösen. Um die Shortcut möglichst einprägsam zu machen,
wurden die Kontrollfunktionen auf Tasten des Ziffernblocks hierarchisch
zugeordnet. Zudem gibt es noch die Möglichkeit, einen Hotkey zum Öffnen
und Schließen des Kontrollfensters zu definieren (siehe cx_hotkey).
* und <A> L Filerequester zur Modulauswahl öffnen.
/ öffnet Setupwindow.
] und ) nächsten angewählten Song spielen (nur bei mehreren Files).
[ und ( Vorgängersong spielen (nur bei mehreren Files).
8 nächsten Subsong spielen.
7 vorherigen Subsong spielen.
5 Patternzeiger auf nächstes Pattern setzen
6 Patternzeiger auf vorheriges Pattern setzen
+ erhöht Abspielgeschwindigkeit
- verringert Abspielgeschwindigkeit
1 Stop Song (Song anhalten, Patternzeiger auf Anfang setzen)
0 Play/Pause (spielen bzw. anhalten der Musik)
. Song anhalten und seinen Speicher freigeben (Eject)
9 verringert die Lautstärke (neben -)
6 erhöht die Lautstärke (neben +)
2 verändert die Balance so, daß der linke Kanal lauter wird.
3 verändert die Balance so, daß der rechte Kanal lauter wird.
<A> ? öffnet den 'About' Requester.
<A> Q beendet DeliTracker.
6.1.4 Appwindow
Um die Modulselektion möglichst komfortabel zu halten, können sie Icons
von Modulen und Modulschubladen auf dem Kontrollfenster ablegen. Die
Module werden dann behandelt, als seien sie im Filerequester selekitert
worden. Bei Schubladen werden alle Files in die Modulliste übernommen.
Files, bei denen es sich nicht um Module handeln kann, wie z.B '.info'
Files, werden ebenso wie Subdirectorys nicht eingelesen. Um diese
Funktion nutzen zu können, muß das DeliTracker Kontrollfenster natürlich
auf der Workbench geöffnet sein.
6.2 Das Setup Fenster
Das Setupfenster dient zur Einstellung von globalen Parametern sowie
Playerspezifischen Einstellungen. Es kann auf mehrere Arten geöffnet
werden: Setup Gadget im Kontrollfenster, über den Menüpunkt 'Prefs ...',
über ShortCut '/' oder über das ARexx Kommando 'openprefswin'. Um einen
Player zu aktivieren, wählen Sie den Player im Playerrequester an. Darauf
werden im PlayerInfo-Feld alle verfügbaren Informationen über diesen
Player angezeigt.
6.2.1 Gadgets
ADD Lädt den angewählten Player und legt den Pfad für
externe Player fest. Ein schon geladener Player
gleichen Namens wird allerdings nur dann durch den
neuen Player ersetzt, falls seine Versionsnummer
kleiner als die des neu geladenen Players ist.
DEL Löscht den selektierten Player, d.h. sein Speicher
wird freigegeben. Interne Player können zwar ebenfalls
gelöscht werden, jedoch wird deren Speicher nicht
freigegeben.
Filter siehe 5.4 Filter Voreinstellung
Quick siehe 5.4 Quick Voreinstellung
Random siehe 5.4 Random Voreinstellung
Songend siehe 5.4 Songend Voreinstellung
Append siehe 5.4 Append Voreinstellung
Fadeout siehe 5.4 Fadeout Voreinstellung
Time siehe 5.4 Timeout Voreinstellung
Load Config Eine Konfigurationsdatei laden und auswerten.
Save Config Schreibt alle aktuellen Einstellungen und die Modulliste
in eine Konfigurationsdatei.
Save List Schreibt nur die aktuelle Modulliste in eine
Konfigurationsdatei.
Config Falls vorhanden, wird die spezifische Konfigurations-
routine des angewählten Players aufgerufen.
OK Schließt das Setup-Fenster.
Sie können das Playerdirectory auch angeben, indem sie den Pfad in das
Stringgadget (links neben ADD) eingeben.
6.2.2 Shortcuts
Um auch hier die Tastaturkürzel einprägsam zu gestalten, wurde, so weit
möglich, der Anfangsbuchstabe der Funktion als Shortcut gewählt. Die
Tastaturkürzel können als Groß- und Kleinbuchstaben eingegeben werden.
a <A>dd (Filerequester zum Playerladen öffnen).
d <D>el (selektierten Player entfernen).
l <L>oad (Konfiguartionsdatei mittels Filerequester laden).
s <S>ave (Konfiguartionsdatei speichern).
c <C>onfig (selektierten Player, wenn möglich, konfigurieren).
o <O>k (Setupwindow verlassen).
q <Q>uickstart umschaltem.
f <F>ilterzustand wechseln.
r <R>andommodus umschalten.
p A<P>pendmodus umschalten.
e Song<E>nd Erkennung umschalten.
u Fadeo<U>t umschalten.
t <T>ime(out) Gadget aktivieren.
6.3 ARexx
Nahezu alle Funktionen von DeliTracker lassen sich auch über ARexx
steuern. Dies ist z.B. in Verbindung mit AmigaVision sehr nützlich.
DeliTracker kann über "rexx_DT" als Function Host angesprochen werden.
Folgende Kommandos stehen zur Verfügung:
quit beendet DeliTracker
filter <yes|no> yes: Schaltet den Filter an.
no: Schaltet den Filter ab.
quickstart <yes|no> yes: Schaltet die Quickstart-Funktion an.
no: Schaltet die Quickstart-Funktion ab.
random <yes|no> yes: Schaltet Randomplay an.
no: Schaltet Randomplay ab
songend <yes|no> yes: Eintreffende Songendsignale werden beachtet.
no: Schaltet die Songend Erkennung ab.
append <yes|no> yes: Aktiviert den Appendmodus.
no: Deaktiviert den Appendmodus.
fadeout <yes|no> yes: Aktiviert den Fadeoutmodus.
no: Deaktiviert den Fadeoutmodus.
timeout <SECS> Timeout wird auf die angegebene Zeitspanne (SECS)
in Sekunden gesetzt. Bei SECS = 0 wird diese Option
abgeschaltet.
volume <VOL> Setzt Volume auf <VOL> (Bereich von VOL: 0 - 64)
balance <BAL> Setzt Balance auf <BAL>, 0 ist default, -64 nur
links, 64 nur rechts (Bereich von BAL: -64 bis 64)
forward Nächstes Pattern spielen
backward Vorheriges Pattern spielen
nextsong Nächsten Song spielen
prevsong Vorherigen Song spielen
nextsubsong Nächsten Subsong spielen
prevsubsong Vorherigen Subsong spielen
faster Abspielgeschwindigkeit erhöhen
slower Abspielgeschwindigkeit verrringern
loadconfig [DATEI] Konfigdatei [DATEI] laden, wenn [DATEI] angegeben
wurde, sonst Requester für 'Konfigdatei laden'
öffnen.
saveconfig [DATEI] Konfiguration und Modulliste in [DATEI] sichern,
wenn [DATEI] angegeben wurde, sonst entsprechenden
Requester öffnen.
savelist [DATEI] Modulliste in [DATEI] sichern, wenn [DATEI]
angegeben wurde, sonst entsprechenden Requester
öffnen.
loadplayer [PLAYER] Lädt den angegebenen Player, ansonsten wird der
Requester zum Player-Laden geöffnet.
deleteplayer <NUMMER> Entfernt den Player mit der angegebenen Nummer aus
der Playerliste. Bei diesem Kommando ist allerdings
zu beachten, daß die Module des gelöschten Players
ab sofort nicht mehr erkannt werden.
configplayer <NUMMER> Ruft die Konfigurationsroutine des dazugehörigen
Players auf.
playpause Der aktuell spielende Song wird angehalten wenn er
spielt bzw. gespielt wenn er pausiert ist.
stop Stoppt den aktuell spielenden Song.
playmod [MODUL] Falls [MODUL] angegeben, wird es geladen und
abspielt, sofern es von einem Player erkannt wird.
Ansonsten öffnet sich der Filerequester zur Datei-
auswahl.
eject Entfernt das derzeitige Modul aus dem Speicher.
makelist [MODUL] Falls [MODUL] angegeben ist, wird es an das Ende
einer internen Modulliste angehängt. Wird es nicht
angegeben, dann wird die interne Modulliste unter
Berücksichtigung des Append-Flags zur aktuellen
Modulliste gemacht.
playlist <NUMMER> Spielt das Modul mit der angegebenen Listenposition.
pubscreen <SCREEN> Schließt alle offenen DeliTracker Fenster auf dem
derzeitigen Screen und versucht, das Kontrollfenster
auf dem PubScreen mit dem Namen <SCREEN> wieder zu
öffnen.
openmainwin Öffnet das Kontrollfenster
closemainwin Schließt das Kontrollfenster (nun kann DeliTracker
nur noch von ARexx aus gesteuert werden).
openprefswin Öffnet das Setup-Fenster
closeprefswin Schließt das Setup-Fenster
status <group> <dependent> Gibt den aktuellen Status zurück. Dabei
werden die drei Gruppen Globale Einstellungen (g),
Modulabhängige Einstellungen (m) und Playerab-
hängige Einstellungen (p) unterschieden. Je nach
Gruppe müssen evtl. weitere Argumente übergeben
werden.
<group> = g : Global
<dependent> = <cmd>
<cmd> Bedeutung und Returnwert
ver DeliTracker Version Zahl
dir Playerverzeichnis String
num Playeranzahl Zahl
led Filter-Zustand <yes|no>
qst Quickstart-Zustand <yes|no>
rnd Random-Zustand <yes|no>
app Append-Zustand <yes|no>
fad Fadeout-Zustand <yes|no>
end Songend-Zustand <yes|no>
tim Song-Timeout (sec) Zahl
mwi Kontrollfenster offen <yes|no>
pwi Setup-Fenster offen <yes|no>
vol derzeitige Lautstärke Zahl
bal derzeitige Balance Zahl
ply Song spielt <yes|no>
pub gewünschter PubScreen String
<group> = m : Module
<dependent> = <cmd>
<cmd> Bedeutung und Returnwert
dir Modulverzeichnis String
fil Modulname String
pnr aktiver Player Zahl
max Module in Modulliste Zahl
num Position in Modulliste Zahl
<group> = p : Player
<dependent> = <playernum> <cmd>
<cmd> Bedeutung und Returnwert
nam Playername String
cre Creatorname String
ver Versionsnummer Zahl
vol Lautstärke veränderbar <yes|no>
bal Balance veränderbar <yes|no>
jmp Patternjump verfügbar <yes|no>
spd Playspeed regelbar <yes|no>
sub Subsong verfügbar <yes|no>
cfg Player konfigurierbar <yes|no>
pck Supports Packed Mods <yes|no>
Bei eckigen Klammern [...] kann ein Argument angegeben werden, bei
spitzen Klammern <...> muß es angegeben werden.
Hinweis: Für fast alle Kommandos existieren Beispiel Scripts. Alle
ARexx Kommandos dürfen in Groß- oder Kleinschreibung verwendet werden.
6.4 Commodities
Da DeliTracker ein Commodity ist lassen sich einige dafür typische Dinge
mit dem Commodies Exchange Programm steuern. Dazu müssen sie zuerst unter
'Verfügbare Commodities' DeliTracker anwählen. Das Cycle Gadget zeigt
ihnen an, ob der Hotkey zum öffnen bzw. schließen des Kontrollfensters
aktiv oder inaktiv ist. Um das Kontrollfenster zu öffnen bzw. ggf. zu
aktivieren klicken sie auf 'Anzeige sichtbar'. Das 'Anzeige verborgen'
Gadget dient zum schließen der DeliTracker Fenster. Ein Klick auf das
'Entfernen' Gadget bewirkt, das DeliTracker beendet wird. Wie bei
Commodities üblich bewirkt ein Betätigen des Closegadgets nur ein
Schließen des Fensters, jedoch kein Beenden des Programms.
7. PROBLEMECKE
Symptom: Das Preferences Window läßt sich nicht öffnen. Überprüfen Sie,
ob die Höhe des Screens, auf dem DeliTracker läuft, mindestens 190 Pixel
plus die Titelbarhöhe ist. Bei einem zu schmalen oder zu niedrigen
Screen läßt sich nämlich das Preferences Window nicht öffnen.
Gegenmaßnahme: Verkleinern Sie den Font (topaz 8) oder benutzen Sie
einen größeren Screen.
Ein Hinweis an alle Besitzer von Turbokarten (speziell 68030 und höher):
Obwohl DeliTracker selbst problemlos auf schnelleren Prozessoren läuft,
kann es bei einigen nicht sauber programmierten (externen) Playern zu
Problemen kommen. Das Timing mancher Abspielroutinen ist nämlich nur auf
den 68000'er zugeschnitten und verursacht dann ein Klirren oder Auslassen
von Noten. Zum Abstürzen der Player oder gar von DeliTracker selbst kann
dies aber nicht führen. Auch in späteren Versionen von DeliTracker wird
es voraussichtlich keine turbofeste Version solcher Player geben, da es
oft fast unmöglich ist, diese entsprechend umzuprogrammieren. Bei Playern,
die absolut auf die Interrupt Vectortabelle ($70 Vector/Audio-DMA Ende)
schreiben, kann es passieren, daß man nichts hört, wenn das VBR-Register
geändert wurde. In der Playerdokumentation ist vermerkt, auf welche
Player dies zutrifft.
Ein Hinweis an alle Besitzer von NTSC-Amigas und Amigas mit ECS-Denise:
Prinzipiell spielen alle Player sowohl auf PAL- als auch auf NTSC-Geräten
gleich schnell, da die Abspielgeschwindigkeit durch einen CIA-B Interrupt
gesteuert wird. Einige (externe) Player benötigen jedoch unbedingt einen
VBlank Interrupt. Da dessen Frequenz vom jeweiligen Videomodus abhängt,
spielt ein solcher Player im Productivity-, NTSC- oder PAL-Modus
unterschiedlich schnell.
Screens mit 16 Farben in Hires oder mit 2 Farben in SuperHires b.z.w.
Productivity benötigen ca. 60% aller Buszyklen des ChipRam. Wenn dann
gleichzeitig ein besonders rechenintensiver Player (z.B. einer mit mehr
als 4 Stimmen) aktiv ist, steht das System fast still und der jeweilige
Player kann mangels Rechenzeit falsch spielen.
Ein Hinweis an alle Modem-Besitzer:
Wenn ein Player den internen DeliTracker Timer-Interrupt benutzt, treten
keine Übertragungsfehler bei seriellen Transfers (getestet auf einem A500
mit NComm bis 19200 Baud) auf. Bei Playern, die selbst einen Timer-
Interrupt generieren, sind derartige Störungen nicht auszuschließen.
8. DIE PROGRAMIERUNG EXTERNER PLAYER
DeliTracker unterstützt sog. externe Player. Das sind Executables, die in
einem speziellen Format vorliegen und von DeliTracker nachgeladen werden
können.
8.1 Das externe Player Konzept
Externe Player sind Executables (Objekt Files), die den Replaycode eines
Soundsystems enthalten. Am Anfang besitzen sie eine charakteristische
Playerstruktur. Diese Struktur wird mit dem Macro aus dem Includefile
'misc/deliplayer.i' erzeugt. Es gibt zwei Arten von externen Playern:
normale Player und Custom Module.
8.1.1 Schematischer Aufbau von externen Playern
Normale Player unterscheiden sich von Custom Modulen durch das
Vorhandensein einer Check Routine und das Fehlen des DTP_CustomPlayer
Tags. Desweiteren enthalten sie natürlich keine Musikdaten :-)
{ Playerheader } Kennzeichnet das Object als Player.
{ TagArray } Beschreibung, was der Player kann.
{ Interfacecode } Playername/Registerumsetzung/Checkcode u.ä.
{ Replaycode } Eigentlicher Musikabspielcode.
{ evtl. Daten } und Daten
8.1.2 Schematischer Aufbau von Custom Modulen
Custom Module sind keine Module im herkömmlichen Sinn, sondern im
wesentlichen Player, die ein Spezialmodul beinhalten. Mit diesem Format
können Sie auch die ausgefallensten Moduleformate leicht an DeliTracker
anpassen. Sollten für den Player jedoch mehrere Module existieren, ist
es in jedem Fall ratsam, einen richtigen Player zu schreiben.
{ Playerheader } Kennzeichnet das Object als Player.
{ TagArray } Beschreibung, was der Player kann.
{ Interfacecode } Routinen zur Registerumsetzung u.ä.
{ Replaycode } Eigentlicher Musikabspielcode.
{ evtl. Daten } und Daten
{ SOUND DATEN } Das eigentliche Modul
8.2 Anpassung von Playern
Es ist relativ einfach, eine Replayroutine an DeliTracker anzupassen.
Alles was Sie tun müssen ist ein wenig Interfacecode zu schreiben. Dies
ist aber halb so wild, denn DeliTracker stellt ihnen viele hilfreiche
Routinen zur Verfügung. Um ein neues Soundsystem anzupassen, benötigen
Sie zum einen den Quellcode oder ein linkbares Objektfile der Replay-
routine, zum anderen sollten mindestens ca. 5 Module zum Testen der
Funktionstüchtigkeit des Players vorhanden sein.
8.2.1 Playerheader
Das PLAYERHEADER Macro generiert den Header, der das File als externen
Player identifiziert. Dieses Macro muß angegeben werden und ganz am
Anfang des Players stehen. Als einziger Parameter ist ein Pointer auf
ein Tag Array einzutragen, in dem alle Funktionen stehen, die der
Player DeliTracker zur Verfügung stellt. Bei allen Funktionsaufrufen
außer der Interruptroutine (DTP_Interrupt) enthält a5 die Base. Globale
Variablen können dadurch adressiert werden (siehe 'misc/deliplayer.i').
Da DeliTracker vor Aufruf einer Playerroutine (außer bei DTP_Interrupt)
alle Register sichert, dürfen diese verändert werden.
PLAYERHEADER <tagarray>
tagarray Pointer auf ein Tag Array, das mit TAG_DONE
abgeschlossen sein muß. Tags, bei denen ti_Data NULL
ist, werden ignoriert.
8.2.2 Modulerkennung
Damit DeliTracker die einzelnen Module unterscheiden kann, befindet
sich in jedem Player eine Erkennungsroutine, die auf ein zugehöriges
Modul testet. Diese Routine prüft auf Stellen im Modul, die bei allen
Modulen eines Players gleich sind. So z.B. auf 'M.K.' bei Offset $438
im NoiseTracker-Player. Bei Sound- und NoiseTracker ist nur das Modul
abgespeichert, z.B. bei MarkII hängt vor jedem Modul noch die Replay-
routine. Bei so einem Modul müssen Sie auf signifikante Assembler-
befehle testen. Ein Vergleich auf ein oder zwei Sprungbefehle, egal
ob bra oder jmp, ist hier nicht ausreichend, da bei vielen Modulen
dieses Typs Sprungtabellen am Anfang stehen und der Player möglicher-
weise das falsche Modul erkennen könnte, was in den meisten Fällen zum
Absturz führt. Der Player muß genau eine Checkroutine verwenden. Daraus
ergeben sich zwei Grundtypen von Playern.
a) Typ eins Player - in der Regel etwas komplexer
Bei ihnen ist die Check1 Funktion implementiert.
Vorteil: Es lassen sich auch Player realisieren, die das Modul selbst
nachladen.
Nachteil: Gepackte Files werden nicht unterstützt.
Dieser Player sollte nur für Härtefälle verwendet werden.
(z.B: FTM, IFF-8SVX Player, der das Sample während dem Spielen
nachlädt, ...)
b) Typ zwei Player - die einfachere Variante
Bei ihnen ist die Check2 Funktion implementiert
Vorteil: Das Modul kann gepackt sein, der Player bemerkt davon nichts.
Nachteil: Das Modul ist in jedem Fall im Chip-Memory.
Es sollte im Normalfall dieser Playertyp verwendet werden.
Egal ob Typ eins oder zwei, wenn der Player das Modul erkannt hat, muß
er in d0.l=0 zurückliefern, wenn nicht d0.l<>0.
8.2.3 Interrupts
Hier gibt es auch eine Einteilung in zwei verschiedene Typen.
a) Player die den DeliTracker Interrupt verwenden
Vorteil: Der Player ist vom Videomodus unabhängig.
Besitzt automatisch die Faster/Slower Funktion.
Kein Aufwand für den Interrupt (Code + Interruptstruktur).
Ist kompatibel zum serial.device
Nachteil: Der Interrupt kommt nicht synchron zum VBlank. (Dies führt
nur in den seltensten Fällen zu Problemen.)
b) Player die ihren eigenen Interrupt erzeugen.
Vorteil: Es können andere Interruptquellen benutzt werden
(z.B. AudioIRQ).
Nachteil: Erhöhter Aufwand, bei VBlank nicht mehr unabhängig vom
Videomodus.
Wenn ein eigener Timerinterrupt verwendet wird, sollte die CIAB
(wg. OS2.0) und die entsprechenden Resourcefunktionen verwendet werden.
Außerdem ist es sehr sinnvoll die Replayroutine nicht direkt im CIA-B
TimerInterrupt abspielen zu lassen, sondern im Timerinterrupt einen
Soft-Interrupt mittels Cause() zu generieren. In diesem SoftInt kann
man dann die eigentliche Replayroutine ablaufen lassen. So hat man den
Vorteil, daß man wesentlich kompatibler zum serial.device ist. Dies
liegt daran, daß SoftInt eine niedrigere Priorität als der der RBF
(Read Buffer Full) Interrupt hat d.h. erst wird der serielle Port
bedient, dann erst die Replayroutine. Es wird davor gewarnt, direkt in
die Interruptvektoren zu schreiben! Zur Erinnerung: vom Betriebssystem
werden die Funktionen AddIntServer() und SetIntVector() zur Verfügung
gestellt!
8.3 Bedeutung der Tags
Außer den SystemTags (TAG_DONE, TAG_IGNORE, TAG_MORE, TAG_SKIP) dürfen
folgende Tags verwendet werden:
DTP_CustomPlayer (BOOL) - dieser Tag deklariert einen Player als
Customplayer.
Bei Verwendung dieses Tags sind folgende Tags dann
bedeutungslos: DTP_PlayerVersion
DTP_PlayerName
DTP_Creator
DTP_Check1
DTP_Check2
DTP_ExtLoad
DTP_Config
DTP_UserConfig
DTP_RequestDTVersion (WORD) - damit kann man sicherstellen, daß
mindestens eine bestimmte Version von DeliTracker
vorhanden ist. Dieser Tag muß angegeben werden, wenn
bei den DeliTrackerGlobals neue Funktionspointer
hinzugekommen sind und diese vom Player benutzt werden.
ti_Data ist dabei die Playerrevision.
DTP_RequestV37 (BOOL) - wenn dieser Tag vorhanden ist, wird der Player
nur noch von der Kick 2.0 Version von DeliTracker geladen
(d.h. dtg_GadToolsBase ist gültig).
DTP_PlayerVersion (WORD) - Tag, der die Revisionsnummer des Players
enthält. Bei zwei Playern mit dem gleichen Playernamen wird
derjenige mit der größeren Revisionsnummer geladen.
DTP_PlayerName (STRPTR) - ti_Data enthält den Pointer auf den Namen des
Players. Dieser String kann zwar beliebig lang sein aber
zur Zeit werden nur die ersten 24 Zeichen angezeigt. Dieser
Tag muß existieren!
DTP_Creator (STRPTR) - Pointer auf den Namen des Autors. Dieser wird im
Setupfenster im Playerinfofeld angezeigt. Dieser String
kann $A als Zeilenumbruch enthalten.
DTP_Check1 (FPTR) - Pointer auf eine Modulerkennungsroutine, die
aufgerufen wird, wenn 1024 Bytes des Moduls geladen sind.
Wird das Modul erkannt, liefert sie d0=0, ansonsten d0<>0.
DTP_Check2 (FPTR) - Pointer auf eine Modulerkennungsroutine, die
aufgerufen wird, wenn das komplette Modul geladen und evtl.
entpackt ist. Wird das Modul erkannt, liefert sie d0=0,
ansonsten d0<>0.
DTP_ExtLoad (FPTR) - Pointer auf eine optionale Laderoutine für Module.
Ist kein Fehler aufgetreten, wird d0=0 zurückgegeben, sonst
d0<>0. Hinweis: Achten Sie darauf, daß im Fehlerfall alle
allocierten Ressourcen (Memory, Locks, ...) wieder
freigegeben werden, da dann keine weiteren Playerfunktionen
mehr angesprungen werden.
DTP_Interrupt (FPTR) - Pointer auf eine Interruptroutine, die mittels
eines Timerinterrupts standardmäßig alle 1/50 sec
aufgerufen wird. Dies ist die Standardmethode, um mit der
richtigen Abspielgeschwindigkeit im PAL/NTSC/Productivity
Videomodus zu spielen. Wenn keine DTP_Faster/DTP_Slower
Tags angegeben sind, übernimmt DeliTracker dies durch
Verändern der Interruptfrequenz. Dieser Tag kann auch nicht
existieren, dann müssen aber DTP_StartInt/DTP_StopInt
vorhanden sein !
DTP_Stop (FPTR) - Pointer auf eine optionale Stoproutine. Wenn dieser Tag
nicht vorhanden ist, verfährt DeliTracker folgendermaßen:
Interrupt stoppen (DTP_StopInt)
Sound Cleanup (DTP_EndSnd)
Song initialisieren (DTP_InitSnd)
Ansonsten hat diese Routine die Aufgabe, einen evtl.
spielenden Song anzuhalten und so zu initialisieren, daß
dieser beim nächsten Starten des Interrupts von Anfang an
zu spielen beginnt.
DTP_Config (FPTR) - Pointer auf eine optionale Initialisierungsroutine.
Diese wird nur einmal unmittelbar nach dem Laden des
Players aufgerufen. Mögliche Anwendungen: Laden einer
playerspezifischen Konfigurationsdatei.
DTP_UserConfig (FPTR) - Pointer auf eine optionale Initialisierungs-
routine. Diese wird nur dann aufgerufen, wenn der User den
Player im Setupfenster anwählt und das 'Config' Gadget
drückt. Mögliche Anwendungen: Öffnen eines Fensters zum
Setzen weiterer Optionen wie z.B. Instrumentenpfad und
Abspeichern einer playerspezifischen Konfigurationsdatei.
DTP_SubSongRange (FPTR) - Dieser Tag sollte angegeben werden, wenn der
Player MultiModule unterstützt. ti_Data zeigt dabei auf
eine Routine, die als Returnwert in d0 die minimale und
in d1 die maximale Subsongnummer zurückgeben muß.
Hinweis: Wenn möglich sollte dieser Tag (evtl. zusammen
mit DTP_SubSongTest) anstelle von DTP_NextSong/DTP_PrevSong
verwendet werden.
DTP_InitPlayer (FPTR) - Pointer auf eine optionale Initialsierungs-
routine, die aufgerufen wird, wenn ein Modul erfolgreich
geladen wurde. Tritt kein Fehler auf, liefert sie d0=0,
ansonsten d0<>0. Hier muß die Allocation der Audiokanäle
stattfinden! (DeliTracker stellt dafür eine eigene Routine
zur Verfügung) Falls der Player Multi-Module unterstützt,
muß hier dtg_SndNum(a5) auf die erste Subsongnummer gesetzt
werden. Falls eine Routine für DTP_SubSongRange existiert,
macht DeliTracker das automatisch (d.h. die Initialisierung
von dtg_SndNum(a5) kann weggelassen werden).
DTP_EndPlayer (FPTR) - Pointer auf eine optionale Cleanuproutine, die
aufgerufen wird, wenn das Modul aus dem Speicher entfernt
wird. Hier muß die Freigabe der Audiokanäle stattfinden!
(DeliTracker stellt dafür eine eigene Routine zur
Verfügung)
DTP_InitSound (FPTR) - Pointer auf eine optionale Initialsierungsroutine.
Diese muß das Modul initialisieren, so daß beim Starten des
Interrupts der Song von Anfang an zu spielen beginnt.
DTP_EndSound (FPTR) - Pointer auf eine optionale Cleanuproutine. Diese
kann z.B. die Lautstärkeregister und die Audio-DMA
rücksetzen.
DTP_StartInt (FPTR) - Pointer auf eine Initialsierungsroutine, die
existieren muß, wenn DTP_Interrupt nicht vorhanden ist.
In diesem Fall muß hier der Sound gestartet werden.
DTP_StopInt (FPTR) - Pointer auf eine Cleanuproutine, die existieren muß,
wenn DTP_Interrupt nicht vorhanden ist. In diesem Fall muß
hier der Sound gestoppt werden.
DTP_Volume (FPTR) - Pointer auf eine Funktion, welche die Lautstärke neu
setzt. Die Funktion wird aufgerufen, wenn die Volume neu
gesetzt wird (Slider, ARexx) und beim Initialisieren des
Moduls vor DTP_InitSnd. Die Mastervolume steht in
dtg_SndVol(a5). Die Mastervolume ist dabei der maximale
Volumewert. Die effektive Volume errechnet sich also
durch: VOL_eff = (( dtg_Volume(a5) * modulevolume )>>6)
Näheres siehe Beispielsourcen.
DTP_Balance (FPTR) - Pointer auf eine Funktion, welche die Balance neu
setzt. Die Funktion wird aufgerufen, wenn die Balance neu
gesetzt wird (Slider, ARexx) und beim Initialisieren des
Moduls vor DTP_InitSnd. Die Balance für die linken Kanäle
steht in dtg_SndLBal(a5), für die rechten Kanäle in
dtg_SndRBal(a5). Hinweis: Alle Player die Balance unterstützen
können auch Volume! Man verwendet dann die gleiche Routine
zum Setzen der Volume&Balance. Die linke Volume errechnet
sich wie folgt: (( dtg_Volume(a5) * dtg_SndLBal(a5) )>>6)
Entsprechendes gilt für rechts.
DTP_Faster (FPTR) - Pointer auf eine Funktion, die den Abspielvorgang
beschleunigt.
DTP_Slower (FPTR) - Pointer auf eine Funktion, die den Abspielvorgang
verlangsamt.
DTP_NextPatt (FPTR) - Pointer auf eine Funktion, die den Patternzeiger
um eins erhöht.
DTP_PrevPatt (FPTR) - Pointer auf eine Funktion, die den Patternzeiger
um eins erniedrigt.
DTP_NextSong (FPTR) - Pointer auf eine Funktion, die Subsongnummer auf
den nächsten Subsong setzt und diesen spielt.
(Falls vorhanden)
DTP_PrevSong (FPTR) - Pointer auf eine Funktion, die Subsongnummer auf
den vorhergehenden Subsong setzt und diesen spielt.
(Falls vorhanden)
DTP_SubSongTest (FPTR) - (ab Version 1.35) Dieser Tag wird nur ausgewertet,
wenn schon der Tag DTP_SubSongRange angegeben wurde. ti_Data
zeigt dabei auf eine Routine, die als Returnwert in d0 einen
Boolschen Wert zurückliefert. Dieser gibt an, ob der SubSong
mit Nummer dtg_SndNum(a5) gültig ist (d0=0) oder nicht
(d0<>0). Dieser Tag ist nur bei den Playern nötig, bei denen
nicht jeder SubSong (innerhalb der durch DTP_SubSongRange
festgelegten Grenzen) benutzt ist.
8.4 DeliTracker support Funktionen
DeliTracker stellt zur Erleichterung der Playeranpassung einige
Funktionen zur Verfügung. Eine Funktion wird wie folgt aufgerufen:
move.l dtg_XXX(a5),a0
jsr (a0)
Alle folgenden Funktionen außer dtg_SongEnd und dtg_SetTimer verwenden
d0/d1/a0/a1 als Scratchregister. In a5 muß bei allen Aufrufen (außer bei
dtg_SongEnd und dtg_SetTimer) die Base stehen. Derzeit existieren
folgende Funktionen:
dtg_GetListData
SYNOPSIS
memory size = dtg_GetListData(number)
a0 d0 d0.l
FUNCTION
Liefert Adresse und Länge eines mit LoadFile() geladenen
Files.
INPUTS
number - Nummer eines Files beginnend mit 0 für das vom
User selektierte File.
RESULT
memory - ein Pointer auf die Startadresse des Files im
Speicher oder NULL im Fehlerfall.
size - Länge des Files in Bytes bzw. 0 im Fehlerfall.
dtg_LoadFile
SYNOPSIS
success = dtg_LoadFile(name)
FUNCTION
Lädt und entpackt ggf. das angegebene File ins Chip-
Memory. (Hinweis: diese Funktion ergänzt automatisch,
falls das File mit dem angegebenen Namen nicht geöffnet
werden konnte '.pp','.im' und '.xpk')
INPUTS
name - der Filename steht in einem internen Buffer (seine
Adresse steht in dtg_PathArray)
RESULT
success - alles ok d0.l=0, sonst d0.l<>0.
dtg_CopyDir
SYNOPSIS
dtg_CopyDir()
FUNCTION
Kopiert das Directory des von User angewählten Files an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
dtg_CopyFile
SYNOPSIS
dtg_CopyFile()
FUNCTION
Kopiert den Filenamen des von User angewählten Files an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
dtg_CopyString
SYNOPSIS
dtg_CopyString(string)
a0
FUNCTION
Kopiert den String, auf den das Register a0 zeigt, an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
INPUTS
string - der Pointer auf den anzuhängenden String steht
in a0
dtg_AudioAlloc
SYNOPSIS
success = dtg_AudioAlloc()
FUNCTION
Belegt alle Audiokanäle.
RESULT
success - alles ok d0.l=0, sonst d0.l<>0.
dtg_AudioFree
SYNOPSIS
dtg_AudioFree()
FUNCTION
Gibt die mit dtg_AudioAlloc belegten Audiokanäle wieder
frei.
dtg_StartInt
SYNOPSIS
dtg_StartInt()
FUNCTION
Startet den Soundinterrupt. (Falls er nicht schon läuft.)
Falls DTP_Interrupt existiert, startet DeliTracker einen
Timerinterrupt, ansonsten wird DTP_StartInt aufgerufen.
dtg_StopInt
SYNOPSIS
dtg_StopInt()
FUNCTION
Stoppt den Soundinterrupt. (Falls er nicht schon angehalten
ist.) Falls DTP_Interrupt existiert, stoppt DeliTracker
seinen Timerinterrupt, ansonsten wird DTP_StopInt
aufgerufen.
dtg_SongEnd
SYNOPSIS
dtg_SongEnd()
FUNCTION
Signalisiert DeliTracker, daß das Modul einmal komplett
gespielt wurde. Diese Funktion verändert keine Register
und darf auch von Interrupts aufgerufen werden.
dtg_CutSuffix
SYNOPSIS
dtg_CutSuffix()
FUNCTION
Entfernt am Ende des Strings, auf den dtg_PathArray(a5)
zeigt ggf. die Endung '.pp', '.im' oder '.xpk'
dtg_SetTimer
SYNOPSIS
dtg_SetTimer()
FUNCTION
Programmiert den CIA-Timer mit dem Wert, der sich in
dtg_Timer(a5) befindet. Diese Funktion verändert keine
Register und darf auch von Interrupts aufgerufen werden.
dtg_WaitAudioDMA
SYNOPSIS
dtg_WaitAudioDMA()
FUNCTION
Diese Funktion wartet eine bestimte Zeit, bevor sie
zurückkehrt. Sie darf nur verwendet werden, wenn die
interne Timer-interrupt Routine verwendet wird. Die
gewartete Zeit ist lange genug um neue Werte in die
Audioregister zu übernehmen. Verwenden sie diese
Routine anstatt der üblichen dbra Schleifen, bzw.
Rasterline warte Routinen. Diese Funktion verändert
keine Register.
8.5 Tips zur Anpassung
Der Player sollte den Zustand der LED unbeeinflußt lassen, da im
Setupwindow eine entsprechende Funktion existiert.
Diese kleine Checkliste für sollte für die Player/Custommodul Anpassung
erfüllt werden, damit der Player systemkonform ist und einwandfrei
funktioniert:
[ ] ist die Checkroutine präzise genug ?
[ ] werden die Audiokanäle richtig belegt und freigegeben ?
[ ] wird aller allocierter Speicher freigegeben ?
[ ] werden alle Locks wieder freigegeben ?
[ ] enforcer und mungwall - Test bestanden ?
[ ] werden alle denkbaren Fehler korrekt abgefangen ?
[ ] wurde der Player mit 1.3, 2.0 und 3.0 getestet ?
[ ] spielt der Player in allen Videomodi korrekt ?
Problemecke:
Symptom mögliche Ursache Beseitigung
Absturz a5 überschrieben
Register nicht gesichert
falsche oder zu späte Initialisierung
Modul zu neu für den Player präziserer Check
klingt schräg Audiodaten nicht im Chipmem Player ins Chipmem
falsche Initialisierung
Modul zu neu für den Player präziserer Check
Player benötigt bestimmte Werte in zusätzliche
einigen Registern Initialisierung
unverträglicher Videomodus
kein Ton Audio-DMA abgeschaltet
bei >68000 Player schreibt direkt auf Betriebssystem
Interruptvektoren benutzen
fast keine fehlerhaftes Interrupt-Handling bei VBlank-IRQ:
freie CPU-Zeit Z-Flag setzen
9. DANKSAGUNGEN
Unser besonderer Dank gilt folgenden Personen:
unseren Testern Stefan Becker, Daniel, Börnie und Manfred für ihre
Bugreports und guten Vorschläge.
Armin Sander (Oktalyzer) und Carsten Schlote (Sonic Arranger) für
die Anpassung Ihrer Soundsysteme.
Jörg W. Schmidt für den Sourcecode von PlayFTM.
Tomas Partl für seinen Player.
DoIO für diverse Module, Demos und Diskmag-Werbung.
allen auf IRC #amiga (Internet Relay Chat)
Markus Illenseer und Christian Rattei für die Korrektur der Docs.
Kevin Dackiw für die Verbesserung der NoisePacker Player und die
Korrektur der englischen Docs.
Florian Vorberger für viele nette Module und die Verbesserung
einiger Player.
U. Dominik Müller für XPK und seine dauernde Nörglerei :-)
Colin Fox and Bruce Dawson für die phantastische req.library.
Eric Kennedy für TstApp.rexx.
und allen, die uns Replay-Routinen, Module oder eine Registration
geschickt haben.